/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __78413E78_499D_4DE0_8114_DAA4AC7B6D4C__
#define __78413E78_499D_4DE0_8114_DAA4AC7B6D4C__

#include "../unknown/macro.h"

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                            COM_MAP
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// declare known com map
//

#define XOS_DECLARE_KNOWN_MAP()\
    const char * _xos_module_name();\
    const char * _xos_module_id();\
    const char * _xos_class_name();\
    const char * _xos_class_id();\
    XOS_DECLARE_COM_MAP()
    
// 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// define known com map
//

// begin without class_name
#define XOS_BEGIN_IMPL_KNOWN_MAP_WITHOUT_CLASS( x ) \
    const char * x::_xos_module_name()\
    {\
        return cls_module_name;\
    }\
    const char * x::_xos_module_id()\
    {\
        return cls_module_id;\
    }\
    const char * x::_xos_class_name()\
    {\
        return "";\
    }\
    const char * x::_xos_class_id()\
    {\
        return "";\
    }\
    XOS_BEGIN_IMPL_COM_MAP( x )

#define XOS_BEGIN_KNOWN_MAP_WITHOUT_CLASS( x ) \
    const char * _xos_module_name()\
    {\
        return cls_module_name;\
    }\
    const char * y##_xos_module_id()\
    {\
        return cls_module_id;\
    }\
    const char * y##_xos_class_name()\
    {\
        return "";\
    }\
    const char * _xos_class_id()\
    {\
        return "";\
    }\
    XOS_BEGIN_COM_MAP( x )

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//

// begin with class_name
#define XOS_BEGIN_IMPL_KNOWN_MAP( x, class_name ) \
    const char * x::_xos_module_name()\
    {\
        return cls_module_name;\
    }\
    const char * x::_xos_module_id()\
    {\
        return cls_module_id;\
    }\
    const char * x::_xos_class_name()\
    {\
        return class_name##_name;\
    }\
    const char * x::_xos_class_id()\
    {\
        return class_name##_id;\
    }\
    XOS_BEGIN_IMPL_COM_MAP( x )

#define XOS_BEGIN_KNOWN_MAP( x, class_name ) \
    const char * _xos_module_name()\
    {\
        return cls_module_name;\
    }\
    const char * _xos_module_id()\
    {\
        return cls_module_id;\
    }\
    const char * _xos_class_name()\
    {\
        return class_name##_name;\
    }\
    const char * _xos_class_id()\
    {\
        return class_name##_id;\
    }\
    XOS_BEGIN_COM_MAP( x )

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//

#define XOS_END_IMPL_KNOWN_MAP() \
    XOS_END_IMPL_COM_MAP()

#define XOS_END_KNOWN_MAP() XOS_END_IMPL_KNOWN_MAP()

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#endif // __78413E78_499D_4DE0_8114_DAA4AC7B6D4C__
